package com.tokenplus.thai.anetwork

import com.tokenplus.thai.adata.checkin.RevGetCheckinDetail
import com.tokenplus.thai.data.*
import com.tokenplus.thai.adata.coin.RevGetCoins
import com.tokenplus.thai.adata.config.RevGetFirstRechargeConfig
import com.tokenplus.thai.adata.config.RevGetRechargeIncomeConfig
import com.tokenplus.thai.adata.coupons.ReqCouponUse
import com.tokenplus.thai.adata.coupons.ReqCouponVerify
import com.tokenplus.thai.adata.coupons.RevGetCoupons
import com.tokenplus.thai.adata.feedback.ReqFeedbackSubmit
import com.tokenplus.thai.adata.home.getInviteFriendEarn.ReqGetInviteFriendEarn
import com.tokenplus.thai.adata.home.getInviteFriendEarn.RevGetInviteFriendEarn
import com.tokenplus.thai.adata.home.getInviteIncomeList.RevGetInviteIncomeList
import com.tokenplus.thai.adata.home.getTransferInDetail.RevGetTransferInDetail
import com.tokenplus.thai.adata.home.getTransferInEarn.RevGetTransferInEarn
import com.tokenplus.thai.adata.home.getTransferInEarnList.RevGetTransferInEarnList
import com.tokenplus.thai.adata.home.getTransferInExtractList.RevGetTransferInExtractList
import com.tokenplus.thai.adata.income.ReqExtractInviteIncome
import com.tokenplus.thai.adata.income.ReqGetInviteIncomeData
import com.tokenplus.thai.adata.income.getInviteIncomeData.RevGetInviteIncomeData
import com.tokenplus.thai.adata.income.getRechargeIncomeData.RevGetRechargeIncomeData
import com.tokenplus.thai.adata.login.ReqChangePassword
import com.tokenplus.thai.adata.login.ReqLogin
import com.tokenplus.thai.adata.login.ReqRegister
import com.tokenplus.thai.adata.newcomerenjoy.RevGetNewComerEnjoy
import com.tokenplus.thai.adata.redMark.RevGetRedMarkInfo
import com.tokenplus.thai.adata.user.*
import com.tokenplus.thai.adata.version.RevAppVersion
import com.tokenplus.thai.adata.version.RevIpInfo
import com.tokenplus.thai.adata.withdraw.ReqWithdrawCreate
import com.tokenplus.thai.adata.withdraw.RevWithdrawGetBalance
import okhttp3.MultipartBody
import retrofit2.Call
import retrofit2.http.*

interface ApiUserService {

    @GET
    fun getIpInfo(
        @Url targetUrl: String,
    ): Call<RevIpInfo>

    @POST
    fun getInviteFriendEarn(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteFriendEarn: ReqGetInviteFriendEarn
    ): Call<RevGetInviteFriendEarn>

    @POST
    fun getInviteIncomeList(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteFriendEarn: ReqGetInviteFriendEarn
    ): Call<RevGetInviteIncomeList>

    @POST
    fun getTransferInDetail(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteFriendEarn: ReqGetInviteFriendEarn
    ): Call<RevGetTransferInDetail>

    @POST
    fun getTransferInEarn(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteFriendEarn: ReqGetInviteFriendEarn
    ): Call<RevGetTransferInEarn>

    @POST
    fun getTransferInEarnList(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteFriendEarn: ReqGetInviteFriendEarn
    ): Call<RevGetTransferInEarnList>

    @POST
    fun getTransferInExtractList(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteFriendEarn: ReqGetInviteFriendEarn
    ): Call<RevGetTransferInExtractList>

    @POST
    fun appVersion(
        @Url targetUrl: String,
        @Body reqBase: ReqBase
    ): Call<RevAppVersion>

    @POST
    fun getCoins(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetCoins>

    @POST
    fun feedbackSubmit(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqFeedbackSubmit: ReqFeedbackSubmit
    ): Call<RevBase>

    @POST
    fun extractInviteIncome(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqExtractInviteIncome: ReqExtractInviteIncome
    ): Call<RevBase>

    @POST
    fun extractRechargeIncome(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqExtractInviteIncome: ReqExtractInviteIncome
    ): Call<RevBase>

    @POST
    fun getInviteIncomeData(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteIncomeData: ReqGetInviteIncomeData
    ): Call<RevGetInviteIncomeData>

    @POST
    fun getRechargeIncomeData(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetInviteIncomeData: ReqGetInviteIncomeData
    ): Call<RevGetRechargeIncomeData>

    @POST
    fun detectUserInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqLogin: ReqLogin
    ): Call<RevDetectUserInfo>

    @POST
    fun login(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqLogin: ReqLogin
    ): Call<RevBase>

    @POST
    fun register(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqRegister: ReqRegister
    ): Call<RevBase>

    @POST
    fun registerConfirm(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqRegister: ReqRegister
    ): Call<RevBase>

    @POST
    fun changePassword(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqChangePassword: ReqChangePassword
    ): Call<RevBase>

    @POST
    fun getUserWallet(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetUserWallet: ReqGetUserWallet
    ): Call<RevGetUserWallet>

    @POST
    fun setWalletName(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqSetWalletName: ReqSetWalletName
    ): Call<RevBase>

    @POST
    fun getUserAccounts(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetUserWallet: ReqGetUserWallet
    ): Call<RevGetUserAccount>

    @POST
    fun getMyInviteInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetMyInviteInfo>

    @POST
    fun getMyTransactions(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqGetMyTransactions: ReqGetMyTransactions
    ): Call<RevGetMyTransactions>

    @POST
    fun withdrawCreate(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqWithdrawCreate: ReqWithdrawCreate
    ): Call<RevBase>

    @POST
    fun withdrawGetBalance(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqWithdrawCreate: ReqWithdrawCreate
    ): Call<RevWithdrawGetBalance>

    @POST
    fun getRechargeIncomeConfig(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetRechargeIncomeConfig>

    @POST
    fun getCoupons(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetCoupons>

    @POST
    fun couponUse(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqCouponUse: ReqCouponUse
    ): Call<RevBase>

    @POST
    fun couponVerify(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqCouponVerify: ReqCouponVerify
    ): Call<RevBase>

    @POST
    fun getNewComerEnjoy(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetNewComerEnjoy>

    @POST
    fun getCheckinDetail(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetCheckinDetail>

    @POST
    fun checkin(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevBase>

    @POST
    fun getRedMarkInfo(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetRedMarkInfo>

    @POST
    fun getFirstRechargeConfig(
        @Url targetUrl: String,
        @HeaderMap headerMap: Map<String, String>,
        @Body reqBase: ReqBase
    ): Call<RevGetFirstRechargeConfig>


    /////////////////////////////

    /**
     * 工具-上传图片
     */
    @Multipart
    @POST
    fun uploadImage(
        @Url targetUrl: String,
        @QueryMap map: Map<String, String>,
        @Part file: MultipartBody.Part
    ): Call<RevImageUpload>
}